// PLC持续监控功能示例

import plcService from '../client/src/services/plcService.js';

// 模拟PLC变量监控示例
class PLCMonitoringExample {
  constructor() {
    this.monitoredVariables = [
      'DB1,W0.0',    // 仓库温度
      'DB1,W2.0',    // 仓库湿度
      'DB1,W4.0',    // 货架1状态
      'DB1,W6.0',    // 货架2状态
      'DB1,W8.0',    // 出入库门状态
      'DB1,W10.0',   // 输送带速度
      'DB1,W12.0',   // 当前任务数
      'DB1,W14.0'    // 系统运行状态
    ];
    
    this.variableDescriptions = {
      'DB1,W0.0': '仓库温度',
      'DB1,W2.0': '仓库湿度',
      'DB1,W4.0': '货架1状态',
      'DB1,W6.0': '货架2状态',
      'DB1,W8.0': '出入库门状态',
      'DB1,W10.0': '输送带速度',
      'DB1,W12.0': '当前任务数',
      'DB1,W14.0': '系统运行状态'
    };
  }

  // 启动监控
  startMonitoring() {
    console.log('🚀 启动PLC变量持续监控...');
    
    // 启动监控，每500ms读取一次
    plcService.startMonitoring(this.monitoredVariables, (variable, newValue, oldValue) => {
      this.handleVariableChange(variable, newValue, oldValue);
    }, 500);
  }

  // 处理变量变化
  handleVariableChange(variable, newValue, oldValue) {
    const description = this.variableDescriptions[variable] || variable;
    console.log(`📊 ${description} 变化: ${oldValue} → ${newValue}`);
    
    // 根据变量类型进行特殊处理
    switch (variable) {
      case 'DB1,W0.0': // 温度监控
        if (newValue > 30) {
          console.warn(`⚠️ 温度过高警告: ${newValue}°C`);
        }
        break;
        
      case 'DB1,W2.0': // 湿度监控
        if (newValue > 80) {
          console.warn(`⚠️ 湿度过高警告: ${newValue}%`);
        }
        break;
        
      case 'DB1,W14.0': // 系统状态监控
        if (newValue === 0) {
          console.error('❌ 系统停止运行!');
        } else if (newValue === 1) {
          console.log('✅ 系统正常运行');
        }
        break;
    }
  }

  // 动态添加监控变量
  addVariableToMonitor(variable) {
    console.log(`➕ 动态添加监控变量: ${variable}`);
    plcService.addMonitoringVariable(variable, (varName, newValue, oldValue) => {
      console.log(`📈 动态监控变量 ${varName}: ${oldValue} → ${newValue}`);
    });
  }

  // 动态移除监控变量
  removeVariableFromMonitor(variable) {
    console.log(`➖ 动态移除监控变量: ${variable}`);
    plcService.removeMonitoringVariable(variable);
  }

  // 停止监控
  stopMonitoring() {
    console.log('🛑 停止PLC变量监控');
    plcService.stopMonitoring();
  }
}

// 运行示例
const example = new PLCMonitoringExample();

// 启动监控
example.startMonitoring();

// 3秒后动态添加一个变量
setTimeout(() => {
  example.addVariableToMonitor('DB1,W16.0'); // 添加新变量监控
}, 3000);

// 6秒后动态移除一个变量
setTimeout(() => {
  example.removeVariableFromMonitor('DB1,W16.0'); // 移除变量监控
}, 6000);

// 10秒后停止监控
setTimeout(() => {
  example.stopMonitoring();
}, 10000);

export default PLCMonitoringExample;